import axios from 'axios';
import { Message } from 'element-ui';
import router from '@/router/index.js';

//  创建 axios 实例
const request = axios.create({
  baseURL: 'http://47.108.147.79:9200', //设置请求地址
});

// 设置响应拦截器
/* 为什么要写 响应拦截器 ：方便 响应失败的时候进行统一的一个处理，而不是每一次都调用后端接口来判断处理*/
request.interceptors.response.use(
  success => {
    // 成功调用接口
    // 根据判断请求状态码 来处理结果
    if (success.status == 200) {
      // 判断响应回来的 状态码
      //  10001 表示业务逻辑错误
      // 90002 表示未登录
      // 70001 表示权限静止
      if (
        success.data.code == 10001 ||
        success.data.code == 90002 ||
        success.data.code == 70001 ||
        success.data.code == 10002 ||
        success.data.code == 10004
      ) {
        //  如果响应码不正常就返回 对应的错误信息到页面上
        Message.error({ message: success.data.msg });
        return;
      } else if (success.data.msg) {
        // 如果上面都不满足 说明  success.data.msg响应的信息为正确的
        //  如果有信息 则返回这个信息到页面上
        Message.success({ message: success.data.msg });
      }
    }
    // 返回 接口对象
    return success;
  },
  error => {
    // 接口调用失败
    if (error.response.code == 504 || error.response.code == 404) {
      Message.error({ message: '服务器异常' });
    } else if (error.response.code == 70001) {
      Message.error({ message: '权限不足，请联系管理员' });
    } else if (error.response.code == 90002) {
      Message.error({ message: '未登录，请去登录' });
      router.replace('/'); // 将当前的Hash 地址替换为 / 表示登录页面
    } else {
      // error.response.data.message 响应信息
      //  如果有响应信息就把该信息 提示到页面
      if (error.response.data.msg) {
        Message.error({ message: error.response.data.message });
      } else {
        Message.error({ message: '未知错误' });
      }
    }
    return;
  },
);

export default request;
